ஜாங்கோ மிடில்வேர் பற்றி ஆழமான பார்வை, அதன் கோரிக்கை கையாளுதல் பங்கு, நன்மைகள், தனிப்பயன் மிடில்வேர் உருவாக்கம் மற்றும் நடைமுறை பயன்பாடுகளை விளக்கும். உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கான ஒரு விரிவான வழிகாட்டி.
பைதான் ஜாங்கோ மிடில்வேர்: கோரிக்கை செயலாக்க பைப்லைன்
உயர்மட்ட பைதான் வலைக் கட்டமைப்பான ஜாங்கோ, வலை உருவாக்கத்திற்கு ஒரு வலுவான மற்றும் நேர்த்தியான அணுகுமுறையை வழங்குகிறது. அதன் செயல்பாட்டின் மையத்தில் கோரிக்கை செயலாக்க பைப்லைன் உள்ளது, இது உள்ளீட்டு கோரிக்கைகளை அர்த்தமுள்ள பதில்களாக மாற்றும் செயல்பாடுகளின் ஒரு வரிசையாகும். இந்த பைப்லைனின் ஒரு முக்கியமான கூறு **மிடில்வேர்** ஆகும், இது டெவலப்பர்களை கோரிக்கை செயலாக்கத்தின் பல்வேறு கட்டங்களில் தனிப்பயன் லாஜிக் மற்றும் நடத்தையை செருக அனுமதிக்கிறது.
ஜாங்கோ கோரிக்கை செயலாக்க சுழற்சியைப் புரிந்துகொள்ளுதல்
மிடில்வேர் பற்றி ஆராய்வதற்கு முன், ஜாங்கோ கோரிக்கையின் அடிப்படை ஓட்டத்தைப் புரிந்துகொள்வது அவசியம். ஒரு பயனர் ஜாங்கோ பயன்பாட்டிற்கு ஒரு கோரிக்கையை அனுப்பும்போது, பின்வரும் படிகள் பொதுவாக நிகழ்கின்றன:
- WSGI சேவையகம் கோரிக்கையைப் பெறுகிறது: வெப் சர்வர் கேட்வே இன்டர்ஃபேஸ் (WSGI) சேவையகம் (கார்னிகார்ன் அல்லது uWSGI போன்றவை) கிளையண்டிலிருந்து HTTP கோரிக்கையைப் பெறுகிறது.
- மிடில்வேர் செயலாக்கம் (உள்ளே வரும்): உங்கள் `settings.py` கோப்பில் வரையறுக்கப்பட்டுள்ள வரிசையின்படி, கோரிக்கை மிடில்வேர் அடுக்கு வழியாக அனுப்பப்படுகிறது. ஒவ்வொரு மிடில்வேர் கூறுகளும் வியூவை அடைவதற்கு முன் கோரிக்கையை செயலாக்க வாய்ப்பைப் பெறுகிறது. அங்கீகாரம், அதிகாரமளித்தல், அமர்வு மேலாண்மை மற்றும் பிற முன்-செயலாக்கப் பணிகள் இங்கு நடைபெறுகின்றன.
- URL தீர்மானம்: ஜாங்கோவின் URL தீர்வி, கோரப்பட்ட URLஐ ஆய்வு செய்து, அதைக் கையாள பொருத்தமான வியூ செயல்பாட்டை தீர்மானிக்கிறது.
- வியூ செயல்படுத்துதல்: அடையாளம் காணப்பட்ட வியூ செயல்பாடு செயல்படுத்தப்படுகிறது, இது பொதுவாக தரவுத்தளத்துடன் தொடர்புகொள்வது, மறுமொழி உள்ளடக்கத்தை உருவாக்குவது மற்றும் HTTP மறுமொழியைத் தயாரிப்பது ஆகியவற்றை உள்ளடக்கியது.
- மிடில்வேர் செயலாக்கம் (வெளியே செல்லும்): மறுமொழி பின்னர் மிடில்வேர் அடுக்கு வழியாக தலைகீழ் வரிசையில் அனுப்பப்படுகிறது. தலைப்புகளைச் சேர்ப்பது, மறுமொழியை சுருக்குவது மற்றும் குக்கீகளை அமைப்பது போன்ற பணிகள் இங்கு செய்யப்படலாம்.
- WSGI சேவையகம் மறுமொழியை அனுப்புகிறது: WSGI சேவையகம் இறுதியாக HTTP மறுமொழியை கிளையண்டிற்கு மீண்டும் அனுப்புகிறது.
ஜாங்கோ மிடில்வேர் என்றால் என்ன?
ஜாங்கோ மிடில்வேர் என்பது ஜாங்கோவின் கோரிக்கை/பதில் செயலாக்கத்தில் உள்ள ஹூக்குகளின் ஒரு கட்டமைப்பாகும். இது ஜாங்கோவின் உள்ளீட்டை அல்லது வெளியீட்டை உலகளவில் மாற்றியமைக்கும் பிளக்கபிள் வகுப்புகளின் தொகுப்பாகும். இதை வலை சேவையகத்திற்கும் வியூ செயல்பாடுகளுக்கும் இடையில் அமர்ந்து கோரிக்கைகளையும் பதில்களையும் இடைமறித்து மாற்றியமைக்கும் தொடர்ச்சியான வடிப்பான்கள் என்று நினைத்துப் பாருங்கள்.
மிடில்வேர் உங்களை அனுமதிக்கிறது:
- வியூவை அடைவதற்கு முன் கோரிக்கையை மாற்றியமைக்க (எ.கா., தலைப்புகளைச் சேர்க்க, அங்கீகரிப்பைச் செய்ய).
- கிளையண்டிற்கு அனுப்பப்படுவதற்கு முன் மறுமொழியை மாற்றியமைக்க (எ.கா., தலைப்புகளைச் சேர்க்க, உள்ளடக்கத்தை சுருக்க).
- கோரிக்கையை வியூவை அடைய அனுமதிக்கலாமா அல்லது மறுக்கலாமா என்று தீர்மானிக்க.
- வியூ செயல்படுத்தப்படுவதற்கு முன்னும் பின்னும் செயல்களைச் செய்ய (எ.கா., பதிவு செய்தல், விவரக்குறிப்பு).
ஜாங்கோவின் இயல்புநிலை மிடில்வேர் போன்ற முக்கிய செயல்பாடுகளைக் கையாளுகிறது:
- அமர்வு மேலாண்மை
- அங்கீகாரம்
- செய்தி காட்சி (எ.கா., வெற்றி மற்றும் பிழை செய்திகள்)
- GZIP சுருக்கம்
ஏன் மிடில்வேர் பயன்படுத்த வேண்டும்? நன்மைகள் மற்றும் பயன்கள்
மிடில்வேர் பல குறிப்பிடத்தக்க நன்மைகளை வழங்குகிறது:
- குறியீடு மறுபயன்பாடு: மிடில்வேர் லாஜிக்கை பல வியூக்கள் மற்றும் திட்டங்களில் மீண்டும் பயன்படுத்தலாம், தேவையற்ற குறியீடுகளைத் தவிர்க்கலாம். உதாரணமாக, ஒவ்வொரு வியூவிலும் அங்கீகாரத்தை செயல்படுத்துவதற்குப் பதிலாக, அதை உலகளவில் கையாள மிடில்வேர் பயன்படுத்தலாம்.
- கவனத்தைப் பிரித்தல்: அங்கீகாரம், அதிகாரமளித்தல், பதிவு செய்தல் மற்றும் கேச்சிங் போன்ற குறுக்குவெட்டு செயல்பாடுகளை உங்கள் வியூக்களின் வணிக லாஜிக்கிலிருந்து பிரிப்பதன் மூலம் கவனத்தைப் பிரிக்க உதவுகிறது. இது உங்கள் குறியீட்டை சுத்தமாகவும், பராமரிக்கக்கூடியதாகவும், புரிந்துகொள்ள எளிதாகவும் ஆக்குகிறது.
- உலகளாவிய தாக்கம்: மிடில்வேர் ஒவ்வொரு கோரிக்கை மற்றும் மறுமொழியையும் பாதிக்கிறது, இது உங்கள் பயன்பாட்டில் நிலையான நடத்தையை செயல்படுத்த ஒரு சக்திவாய்ந்த கருவியாக அமைகிறது.
- நெகிழ்வுத்தன்மை மற்றும் நீட்டிப்புத்தன்மை: ஜாங்கோவின் மிடில்வேர் அமைப்பு மிகவும் நெகிழ்வானது. உங்கள் பயன்பாட்டின் நடத்தையைத் தனிப்பயனாக்க மிடில்வேர் கூறுகளை எளிதாகச் சேர்க்கலாம், நீக்கலாம் அல்லது மாற்றியமைக்கலாம். உங்கள் குறிப்பிட்ட திட்டத்திற்கு ஏற்றவாறு மிகச் சில தேவைகளைப் பூர்த்தி செய்ய உங்கள் சொந்த தனிப்பயன் மிடில்வேரை எழுதலாம்.
- செயல்திறன் மேம்பாடு: கேச்சிங் மிடில்வேர் போன்ற சில மிடில்வேர், உங்கள் தரவுத்தளம் மற்றும் வலை சேவையகத்தின் சுமையைக் குறைப்பதன் மூலம் உங்கள் பயன்பாட்டின் செயல்திறனை கணிசமாக மேம்படுத்தலாம்.
ஜாங்கோ மிடில்வேர் எவ்வாறு செயல்படுகிறது: செயலாக்க வரிசை
`settings.py` இல் மிடில்வேர் வகுப்புகள் வரையறுக்கப்பட்டுள்ள வரிசை மிக முக்கியமானது. ஜாங்கோ மிடில்வேரை ஒரு குறிப்பிட்ட வரிசையில் செயலாக்குகிறது, முதலில் கோரிக்கை கட்டத்தில் (மேலிருந்து கீழாக) பின்னர் மறுமொழி கட்டத்தில் (கீழிருந்து மேலாக).
கோரிக்கை கட்டம்: `MIDDLEWARE` அமைப்பில் வரையறுக்கப்பட்டுள்ள வரிசையின்படி, உள்ளீட்டு கோரிக்கைக்கு மிடில்வேர் பயன்படுத்தப்படுகிறது.
மறுமொழி கட்டம்: மறுமொழி தலைகீழ் வரிசையில் மிடில்வேர் வழியாக செல்கிறது. அதாவது, உங்கள் `MIDDLEWARE` அமைப்பில் வரையறுக்கப்பட்டுள்ள கடைசி மிடில்வேர் மறுமொழியை செயலாக்குவதில் முதல் மிடில்வேர் ஆக இருக்கும், மற்றும் முதல் மிடில்வேர் கடைசி மிடில்வேர் ஆக இருக்கும்.
உங்கள் மிடில்வேர் எவ்வாறு செயல்படுகிறது என்பதைக் கட்டுப்படுத்தவும் எதிர்பாராத நடத்தையைத் தடுக்கவும் இந்த வரிசையைப் புரிந்துகொள்வது மிக முக்கியம்.
`settings.py` இல் மிடில்வேரை உள்ளமைத்தல்
உங்கள் `settings.py` கோப்பில் உள்ள `MIDDLEWARE` அமைப்பு மிடில்வேருக்கான மத்திய உள்ளமைவு புள்ளியாகும். இது சரம் பட்டியலாகும், ஒவ்வொன்றும் ஒரு மிடில்வேர் வகுப்பிற்கான பாதையைக் குறிக்கிறது.
இங்கே ஒரு எளிமையான உதாரணம்:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
இந்த உள்ளமைவு ஜாங்கோவின் இயல்புநிலை மிடில்வேரை உள்ளடக்கியது, அத்தியாவசிய பணிகளைக் கையாளுகிறது. உங்கள் தனிப்பயன் மிடில்வேர் வகுப்பிற்கான பாதையை இந்த பட்டியலில் சேர்ப்பதன் மூலம் உங்கள் தனிப்பயன் மிடில்வேரை சேர்க்கலாம், அது இருக்கும் மிடில்வேருடன் சரியான வரிசையில் இருப்பதை உறுதிசெய்யவும்.
தனிப்பயன் ஜாங்கோ மிடில்வேரை எழுதுதல்
தனிப்பயன் மிடில்வேரை உருவாக்குவது ஒரு பைதான் வகுப்பை வரையறுப்பதை உள்ளடக்குகிறது, இது கோரிக்கை/பதில் சுழற்சியை இடைமறித்து மாற்றியமைக்கும் குறிப்பிட்ட முறைகளைக் கொண்டுள்ளது. நீங்கள் செயல்படுத்தக்கூடிய முக்கிய முறைகள்:
- `__init__(self, get_response)`: இது ஒருமுறை மட்டுமே அழைக்கப்படுகிறது, மிடில்வேர் துவக்கப்படும்போது. பிற்கால பயன்பாட்டிற்காக அழைக்கக்கூடிய `get_response` ஐ ஒரு இன்ஸ்டன்ஸ் மாறியாக நீங்கள் பொதுவாக சேமிக்கிறீர்கள். இந்த அளவுரு சங்கிலியில் அடுத்த மிடில்வேரை அல்லது இது கடைசி மிடில்வேர் என்றால் வியூ செயல்பாட்டைக் குறிக்கிறது.
- `__call__(self, request)`: இந்த முறை ஒவ்வொரு கோரிக்கைக்கும் அழைக்கப்படுகிறது. இது உங்கள் மிடில்வேரின் மையமாகும், அங்கு நீங்கள் உங்கள் செயலாக்கத்தைச் செய்கிறீர்கள். இது கோரிக்கை பொருளை உள்ளீடாகப் பெறுகிறது மற்றும் `HttpResponse` பொருளை அல்லது `get_response(request)` ஐ அழைப்பதன் முடிவை திரும்பப் பெற வேண்டும்.
- `process_request(self, request)`: வியூ அழைக்கப்படுவதற்கு முன்பு அழைக்கப்படுகிறது. இது கோரிக்கை பொருளைப் பெறுகிறது. நீங்கள் `request` பொருளை மாற்றியமைக்கலாம் அல்லது கோரிக்கையை ஷார்ட்-சர்க்யூட் செய்ய `HttpResponse` ஐ திரும்பப் பெறலாம். நீங்கள் `None` ஐ திரும்பப் பெற்றால், கோரிக்கை அடுத்த மிடில்வேர் அல்லது வியூவிற்குச் செல்கிறது.
- `process_view(self, request, view_func, view_args, view_kwargs)`: ஜாங்கோ வியூவை அழைப்பதற்கு முன்பு அழைக்கப்படுகிறது. இது `request` பொருள், வியூ செயல்பாடு மற்றும் வியூவிற்கு அனுப்பப்பட்ட எந்தவொரு வாதங்களையும் பெறுகிறது. நீங்கள் கோரிக்கையை அல்லது வியூவின் வாதங்களை மாற்றியமைக்கலாம். ஒரு `HttpResponse` ஐ திரும்பப் பெறுவது செயலாக்கத்தை ஷார்ட்-சர்க்யூட் செய்கிறது.
- `process_response(self, request, response)`: வியூ அழைக்கப்பட்டு மறுமொழி உருவாக்கப்பட்ட பிறகு அழைக்கப்படுகிறது. இது `request` பொருள் மற்றும் `response` பொருளைப் பெறுகிறது. நீங்கள் `response` பொருளை மாற்றியமைக்கலாம். இது `response` பொருளை (மாற்றப்பட்ட அல்லது மாற்றப்படாத) *திரும்பப் பெற வேண்டும்*.
- `process_exception(self, request, exception)`: கோரிக்கை செயலாக்கத்தின் போது (மிடில்வேரில் அல்லது வியூவில்) ஒரு விதிவிலக்கு ஏற்பட்டால் அழைக்கப்படுகிறது. இது `request` பொருள் மற்றும் விதிவிலக்கு பொருளைப் பெறுகிறது. விதிவிலக்கைக் கையாளவும் செயலாக்கத்தை ஷார்ட்-சர்க்யூட் செய்யவும் ஒரு `HttpResponse` ஐ திரும்பப் பெறலாம் அல்லது ஜாங்கோ அதன் இயல்புநிலை முறையில் விதிவிலக்கைக் கையாள அனுமதிக்க `None` ஐ திரும்பப் பெறலாம்.
உதாரணம்: ஒரு எளிய தனிப்பயன் மிடில்வேர் (கோரிக்கைகளைப் பதிவு செய்தல்)
ஒவ்வொரு உள்வரும் கோரிக்கையையும் பதிவு செய்ய மிடில்வேரை உருவாக்குவோம். உங்கள் ஜாங்கோ பயன்பாட்டில் `middleware.py` என்ற கோப்பை உருவாக்கவும்.
# In myapp/middleware.py
import logging
logger = logging.getLogger(__name__)
class RequestLoggingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# Code to be executed for each request before the view is called
logger.info(f'Request received: {request.method} {request.path}')
response = self.get_response(request)
# Code to be executed for each request/response after the view is called
return response
பின்னர், இந்த மிடில்வேரை உங்கள் `settings.py` இல் சேர்க்கவும்:
MIDDLEWARE = [
# ... other middleware ...
'myapp.middleware.RequestLoggingMiddleware',
]
இப்போது, ஒவ்வொரு முறையும் ஒரு கோரிக்கை வரும்போது, மிடில்வேர் கோரிக்கை முறை மற்றும் பாதையை உங்கள் பதிவுகளில் பதிவு செய்யும்.
உதாரணம்: கோரிக்கை தலைப்புகளை மாற்றியமைத்தல்
ஒவ்வொரு மறுமொழிக்கும் ஒரு தனிப்பயன் தலைப்பைச் சேர்க்கும் மிடில்வேரின் ஒரு உதாரணம் இங்கே:
# In myapp/middleware.py
class AddCustomHeaderMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response['X-Custom-Header'] = 'Hello from Middleware!'
return response
இதை உங்கள் `settings.py` இல் உள்ள `MIDDLEWARE` பட்டியலில் சேர்க்க மறக்காதீர்கள்.
ஜாங்கோ மிடில்வேரின் பொதுவான பயன்பாட்டு நிகழ்வுகள் மற்றும் உதாரணங்கள்
மிடில்வேர் பல்துறைத்திறன் கொண்டது. சில பொதுவான பயன்பாட்டு நிகழ்வுகள் மற்றும் உதாரணங்கள் இங்கே:
- அங்கீகாரம் மற்றும் அங்கீகாரமளித்தல்: குறிப்பிட்ட வியூக்களுக்கான அணுகலை அனுமதிக்கும் முன் பயனர் நற்சான்றிதழ்கள் மற்றும் அணுகல் உரிமைகளை சரிபார்த்தல். ஜாங்கோவின் `AuthenticationMiddleware` இதை கையாளுகிறது. தனிப்பயன் மிடில்வேர் வெவ்வேறு அங்கீகார முறைகளை (எ.கா., API விசைகள், OAuth) ஆதரிக்க அல்லது பங்கு அடிப்படையிலான அணுகல் கட்டுப்பாட்டை செயல்படுத்த இதை விரிவாக்கலாம்.
- அமர்வு மேலாண்மை: பயனர் சார்ந்த தரவை சேமிக்கவும் மீட்டெடுக்கவும் பயனர் அமர்வுகளைக் கையாளுகிறது. ஜாங்கோவின் `SessionMiddleware` இதை இயல்புநிலையாகக் கையாளுகிறது.
- CSRF பாதுகாப்பு: குறுக்கு-தளம் கோரிக்கை மோசடி தாக்குதல்களிலிருந்து பாதுகாத்தல். ஜாங்கோவின் `CsrfViewMiddleware` CSRF பாதுகாப்பை செயல்படுத்துகிறது.
- GZIP சுருக்கம்: அலைவரிசை பயன்பாட்டைக் குறைக்கவும் பக்க ஏற்றும் நேரத்தை மேம்படுத்தவும் மறுமொழிகளை சுருக்குதல். ஜாங்கோவின் `GZipMiddleware` இதை கையாளுகிறது.
- பதிவு செய்தல் மற்றும் கண்காணிப்பு: கோரிக்கைகள், பிழைகள் மற்றும் செயல்திறன் அளவீடுகளை பதிவு செய்தல். முந்தைய உதாரணம் கோரிக்கைகளை பதிவு செய்வதை நிரூபித்தது. கண்காணிப்பு கருவிகளுடன் ஒருங்கிணைக்க மிடில்வேர் பயன்படுத்தப்படலாம்.
- உள்ளடக்க பாதுகாப்பு கொள்கை (CSP): பல்வேறு வலை பாதிப்புகளிலிருந்து பாதுகாக்க பாதுகாப்பு தலைப்புகளை அமைத்தல். மிடில்வேர் `Content-Security-Policy` தலைப்பை அமைப்பதன் மூலம் உலாவியால் ஏற்றக்கூடிய உள்ளடக்க ஆதாரங்களை கட்டுப்படுத்தலாம்.
- கேச்சிங்: செயல்திறனை மேம்படுத்த அடிக்கடி அணுகப்படும் தரவை கேச்சிங் செய்தல். ஜாங்கோவின் உள்ளமைக்கப்பட்ட கேச்சிங் கட்டமைப்பு மற்றும் மூன்றாம் தரப்பு மிடில்வேர் இந்த செயல்பாட்டை வழங்குகிறது.
- URL வழிமாற்றம்: குறிப்பிட்ட நிபந்தனைகளின் அடிப்படையில் பயனர்களை வெவ்வேறு URLகளுக்கு வழிமாற்றுதல் (எ.கா., பயனர் உள்ளூர், சாதன வகை).
- கோரிக்கை மாற்றம்: கோரிக்கை பொருளை மாற்றியமைத்தல் (எ.கா., தலைப்புகளைச் சேர்த்தல், கோரிக்கை பண்புகளை அமைத்தல்). உங்கள் பயன்பாடு ஒரு ப்ராக்ஸிக்குப் பின்னால் இயங்கினால் `REMOTE_ADDR` ஐ அமைப்பது போன்ற பணிகளுக்கு இது பொதுவாகப் பயன்படுத்தப்படுகிறது.
- மறுமொழி மாற்றம்: மறுமொழி பொருளை மாற்றியமைத்தல் (எ.கா., தலைப்புகளைச் சேர்த்தல், உள்ளடக்கத்தை மாற்றியமைத்தல்).
- வீத வரம்பு: துஷ்பிரயோகத்தைத் தடுக்கவும் உங்கள் சேவையகம் நிரம்பி வழியாமல் பாதுகாக்கவும் ஒரு குறிப்பிட்ட IP முகவரியிலிருந்து கோரிக்கைகளின் எண்ணிக்கையை வரம்பிடல்.
- சர்வதேசமயமாக்கல் (i18n) மற்றும் உள்ளூர்மயமாக்கல் (l10n): பயனர் விருப்பத்தேர்வுகள் அல்லது உலாவி அமைப்புகளின் அடிப்படையில் கோரிக்கைகளுக்கான மொழி மற்றும் உள்ளூர் அமைப்பை அமைத்தல். ஜாங்கோவின் `LocaleMiddleware` இதை கையாளுகிறது.
உதாரணம்: அடிப்படை அங்கீகாரத்தை செயல்படுத்துதல்
அனைத்து பக்கங்களையும் அணுக ஒரு பயனர் பெயர் மற்றும் கடவுச்சொல் தேவைப்படும் மிடில்வேரை உருவாக்குவோம் (விளக்க நோக்கங்களுக்காக, சரியான பாதுகாப்பு பரிசீலனைகள் இல்லாமல் இதை உற்பத்தியில் *பயன்படுத்த வேண்டாம்*).
# In myapp/middleware.py
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
class BasicAuthMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if not request.user.is_authenticated:
auth_header = request.META.get('HTTP_AUTHORIZATION')
if auth_header:
try:
auth_type, auth_string = auth_header.split(' ', 1)
if auth_type.lower() == 'basic':
import base64
auth_decoded = base64.b64decode(auth_string).decode('utf-8')
username, password = auth_decoded.split(':', 1)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
else:
return HttpResponse('Unauthorized', status=401, headers={'WWW-Authenticate': 'Basic realm="Restricted Area"'})
except Exception:
return HttpResponse('Unauthorized', status=401, headers={'WWW-Authenticate': 'Basic realm="Restricted Area"'})
else:
return HttpResponse('Unauthorized', status=401, headers={'WWW-Authenticate': 'Basic realm="Restricted Area"'})
return self.get_response(request)
`settings.py` இல் இதை `MIDDLEWARE` இல் சேர்க்கவும்:
MIDDLEWARE = [
# ... other middleware ...
'myapp.middleware.BasicAuthMiddleware',
]
இந்த மிடில்வேர் ஒவ்வொரு கோரிக்கையிலும் ஒரு அடிப்படை அங்கீகார தலைப்பை சரிபார்க்கிறது. தலைப்பு இருந்தால், அது பயனரை அங்கீகரிக்க முயற்சிக்கிறது. அங்கீகாரம் தோல்வியுற்றால், அது ஒரு "அங்கீகரிக்கப்படாத" மறுமொழியைத் தருகிறது. அங்கீகாரம் வெற்றியடைந்தால், அது கோரிக்கையை வியூக்களுக்கு செல்ல அனுமதிக்கிறது.
உதாரணம்: கோரிக்கை வீத வரம்பை செயல்படுத்துதல்
வீத வரம்பு துஷ்பிரயோகத்தைத் தடுக்கவும் உங்கள் சேவையகத்தை நிரம்பி வழியாமல் பாதுகாக்கவும் உதவுகிறது. பின்வரும் உதாரணம் ஒரு எளிமையான செயல்பாட்டை வழங்குகிறது.
# In myapp/middleware.py
import time
from django.http import HttpResponse, HttpResponseTooManyRequests
from django.conf import settings
class RateLimitMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self.requests = {}
def __call__(self, request):
ip_address = self.get_client_ip(request)
now = time.time()
if ip_address:
if ip_address not in self.requests:
self.requests[ip_address] = {
'count': 0,
'last_request': now
}
if settings.RATE_LIMIT_WINDOW:
if now - self.requests[ip_address]['last_request'] > settings.RATE_LIMIT_WINDOW:
self.requests[ip_address]['count'] = 0
self.requests[ip_address]['last_request'] = now
self.requests[ip_address]['count'] += 1
self.requests[ip_address]['last_request'] = now
if settings.RATE_LIMIT_REQUESTS and self.requests[ip_address]['count'] > settings.RATE_LIMIT_REQUESTS:
return HttpResponseTooManyRequests('Too many requests.')
return self.get_response(request)
def get_client_ip(self, request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0].strip()
else:
ip = request.META.get('REMOTE_ADDR')
return ip
உங்கள் `settings.py` இல், இந்த அமைப்புகளை வரையறுக்கவும்:
RATE_LIMIT_REQUESTS = 10 # Max requests per window
RATE_LIMIT_WINDOW = 60 # Seconds
இதை `MIDDLEWARE` இல் சேர்க்கவும்:
MIDDLEWARE = [
# ... other middleware ...
'myapp.middleware.RateLimitMiddleware',
]
இந்த மிடில்வேர் கிளையண்டின் IP முகவரியின் அடிப்படையில் கோரிக்கைகளை வரம்புக்குட்படுத்துகிறது. வீத வரம்பை உள்ளமைக்க `RATE_LIMIT_REQUESTS` மற்றும் `RATE_LIMIT_WINDOW` ஐ சரிசெய்யவும்.
ஜாங்கோ மிடில்வேரை உருவாக்குவதற்கான சிறந்த நடைமுறைகள்
இந்த சிறந்த நடைமுறைகளைப் பின்பற்றுவது உங்கள் மிடில்வேர் பயனுள்ளதாகவும், பராமரிக்கக்கூடியதாகவும், செயல்திறன் சிக்கல்களை அறிமுகப்படுத்தாமலும் இருப்பதை உறுதி செய்கிறது:
- எளிமையாக வைத்திருங்கள்: மிடில்வேர் குறிப்பிட்ட, நன்கு வரையறுக்கப்பட்ட பணிகளில் கவனம் செலுத்த வேண்டும். சிக்கலான லாஜிக் அல்லது அதிகப்படியான சார்புகளைத் தவிர்க்கவும்.
- செயல்திறன் மிக்கதாக இருங்கள்: மிடில்வேர் ஒவ்வொரு கோரிக்கை/மறுமொழிக்கும் செயல்படுத்தப்படுகிறது. செயலாக்க நேரத்தைக் குறைக்க உங்கள் குறியீட்டை மேம்படுத்தவும். உங்கள் மிடில்வேரில் தடுக்கும் செயல்பாடுகள் அல்லது தேவையற்ற தரவுத்தள வினவல்களைத் தவிர்க்கவும்.
- முழுமையாக சோதிக்கவும்: உங்கள் மிடில்வேர் சரியாக செயல்படுவதையும் வெவ்வேறு சூழ்நிலைகளில் எதிர்பார்த்தபடி நடந்து கொள்வதையும் உறுதிப்படுத்த யூனிட் சோதனைகளை எழுதுங்கள். விளிம்பு நிகழ்வுகள் மற்றும் பிழை கையாளுதலை சோதிக்கவும்.
- தெளிவாக ஆவணப்படுத்தவும்: உங்கள் மிடில்வேர் என்ன செய்கிறது, அது எப்படி வேலை செய்கிறது, அதை எப்படி உள்ளமைப்பது என்பதை விளக்கும் தெளிவான ஆவணங்களை வழங்கவும். உதாரணங்கள் மற்றும் பயன்பாட்டு வழிமுறைகளைச் சேர்க்கவும்.
- ஜாங்கோ மரபுகளைப் பின்பற்றவும்: ஜாங்கோவின் குறியீட்டு நடை மற்றும் மரபுகளுக்கு இணங்குங்கள். இது உங்கள் குறியீட்டை மேலும் படிக்கக்கூடியதாகவும் மற்ற டெவலப்பர்கள் புரிந்துகொள்ள எளிதாகவும் ஆக்குகிறது.
- செயல்திறன் விளைவுகளைக் கவனியுங்கள்: உங்கள் மிடில்வேரின் சாத்தியமான செயல்திறன் தாக்கத்தை கவனமாக மதிப்பீடு செய்யுங்கள், குறிப்பாக இது வள-செறிவான செயல்பாடுகளை உள்ளடக்கியிருந்தால்.
- விதிவிலக்குகளை நேர்த்தியாகக் கையாளவும்: உங்கள் மிடில்வேர் உங்கள் பயன்பாட்டை செயலிழக்கச் செய்வதைத் தடுக்க சரியான பிழை கையாளுதலைச் செயல்படுத்தவும். சாத்தியமான விதிவிலக்குகளைக் கண்டறியவும் பிழைகளை பதிவு செய்யவும் `try...except` பிளாக்குகளைப் பயன்படுத்தவும். விரிவான விதிவிலக்கு கையாளுதலுக்காக `process_exception()` ஐப் பயன்படுத்தவும்.
- வரிசை முக்கியமானது: `MIDDLEWARE` அமைப்பில் உங்கள் மிடில்வேரின் வரிசையை கவனமாக கருத்தில் கொள்ளுங்கள். விரும்பிய நடத்தையை அடையவும் மோதல்களைத் தவிர்க்கவும் மிடில்வேர் சரியான வரிசையில் வைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்.
- கோரிக்கை/மறுமொழியை தேவையில்லாமல் மாற்றியமைப்பதைத் தவிர்க்கவும்: விரும்பிய நடத்தையை அடைய தேவைப்படும்போது மட்டுமே கோரிக்கை/மறுமொழி பொருட்களை மாற்றியமைக்கவும். தேவையற்ற மாற்றங்கள் செயல்திறன் சிக்கல்களுக்கு வழிவகுக்கும்.
மேம்பட்ட மிடில்வேர் நுட்பங்கள் மற்றும் பரிசீலனைகள்
அடிப்படைக்கு அப்பால், சில மேம்பட்ட நுட்பங்கள் இங்கே:
- ஒத்திசைவற்ற பணிகளுக்கு மிடில்வேரை பயன்படுத்துதல்: மின்னஞ்சல்களை அனுப்புவது அல்லது தரவை பின்னணியில் செயலாக்குவது போன்ற ஒத்திசைவற்ற பணிகளைத் தொடங்க நீங்கள் மிடில்வேரைப் பயன்படுத்தலாம். இந்த செயல்பாடுகளைக் கையாள Celery அல்லது பிற டாஸ்க் கியூக்களைப் பயன்படுத்தவும்.
- மிடில்வேர் தொழிற்சாலைகள்: மிகவும் சிக்கலான உள்ளமைவுகளுக்கு, நீங்கள் மிடில்வேர் தொழிற்சாலைகளைப் பயன்படுத்தலாம், அவை உள்ளமைவு வாதங்களை எடுத்து மிடில்வேர் வகுப்புகளைத் திரும்பப் பெறும் செயல்பாடுகளாகும். `settings.py` இல் வரையறுக்கப்பட்ட அளவுருக்களுடன் மிடில்வேரை துவக்க வேண்டியிருக்கும்போது இது நன்மை பயக்கும்.
- நிபந்தனை மிடில்வேர்: அமைப்புகள் அல்லது சுற்றுச்சூழல் மாறிகளின் அடிப்படையில் நீங்கள் மிடில்வேரை நிபந்தனையுடன் இயக்கலாம் அல்லது முடக்கலாம். இது வெவ்வேறு சூழல்களுக்கு (எ.கா., மேம்பாடு, சோதனை, உற்பத்தி) உங்கள் பயன்பாட்டின் நடத்தையை வடிவமைக்க உங்களை அனுமதிக்கிறது.
- API வீத வரம்பிற்கான மிடில்வேர்: உங்கள் API endpoints க்கான அதிநவீன வீத வரம்பு நுட்பங்களை செயல்படுத்தவும். வீத-வரம்பு தரவை சேமிக்க Redis போன்ற மூன்றாம் தரப்பு நூலகங்கள் அல்லது சிறப்பு சேவைகளைப் பயன்படுத்துவதைக் கவனியுங்கள்.
- மூன்றாம் தரப்பு நூலகங்களுடன் ஒருங்கிணைத்தல்: உங்கள் மிடில்வேரை மூன்றாம் தரப்பு நூலகங்கள் மற்றும் கருவிகளுடன் தடையின்றி ஒருங்கிணைக்கலாம். உதாரணமாக, அளவீடுகளை சேகரிக்கவும் செயல்திறனைக் கண்காணிக்கவும் கண்காணிப்பு கருவிகளுடன் ஒருங்கிணைக்கவும்.
உதாரணம்: ஒரு மிடில்வேர் தொழிற்சாலையைப் பயன்படுத்துதல்
இந்த உதாரணம் ஒரு எளிய மிடில்வேர் தொழிற்சாலையை நிரூபிக்கிறது. இந்த அணுகுமுறை உங்கள் `settings.py` கோப்பிலிருந்து உள்ளமைவு அளவுருக்களை அனுப்ப உங்களை அனுமதிக்கிறது.
# In myapp/middleware.py
from django.conf import settings
def my_middleware_factory(setting_key):
class MyConfigurableMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self.config_value = settings.get(setting_key, 'default_value') # Read config
def __call__(self, request):
# Use self.config_value
print(f'Config value: {self.config_value}')
return self.get_response(request)
return MyConfigurableMiddleware
`settings.py` இல், இதை இவ்வாறு உள்ளமைக்கவும்:
MIDDLEWARE = [
# ... other middleware ...
'myapp.middleware.my_middleware_factory', # Note: Pass it without parenthesis or arguments.
]
MY_CUSTOM_SETTING = 'some_value'
மற்றும், `urls.py` அல்லது மிடில்வேர் பயன்படுத்தப்படும் வேறு எந்த இடத்திலும், நீங்கள் ஒரு உள்ளமைவு அமைப்பை தொழிற்சாலை முறைக்கு அனுப்பலாம்:
from myapp.middleware import my_middleware_factory
urlpatterns = [
# ...other url patterns...
# No arguments needed for the factory method in URL configuration
]
இந்த அணுகுமுறை அதிகரித்த நெகிழ்வுத்தன்மை மற்றும் தனிப்பயனாக்கத்தை வழங்குகிறது.
பொதுவான சிக்கல்கள் மற்றும் சரிசெய்தல்
ஜாங்கோ மிடில்வேருடன் பணிபுரியும் போது நீங்கள் சந்திக்கக்கூடிய சில பொதுவான சிக்கல்கள் மற்றும் தீர்வுகளுடன்:
- தவறான மிடில்வேர் வரிசை: உங்கள் மிடில்வேர் எதிர்பார்த்தபடி செயல்படவில்லை என்றால், `settings.py` இல் உள்ள வரிசையை இருமுறை சரிபார்க்கவும். வரிசை முக்கியமானது.
- கோரிக்கை செயலாக்கத்தின் போது பிழைகள்: உங்கள் மிடில்வேர் ஒரு பிழையை எறிந்தால், அது முழு கோரிக்கை சுழற்சியையும் உடைக்கலாம். விதிவிலக்குகளை நேர்த்தியாகக் கையாளவும் எதிர்பாராத தோல்விகளைத் தடுக்கவும் `process_exception()` முறையைப் பயன்படுத்தவும். மேலும், உங்கள் மிடில்வேரில் வட்டச் சார்புகள் இல்லை என்பதை உறுதிப்படுத்தவும்.
- செயல்திறன் சிக்கல்கள்: திறனற்ற மிடில்வேர் உங்கள் பயன்பாட்டை மெதுவாக்கும். செயல்திறன் சிக்கல்களைக் கண்டறிந்து அதற்கேற்ப மேம்படுத்த உங்கள் குறியீட்டைப்Profiling செய்யுங்கள். மிடில்வேரில் வள-செறிவான செயல்பாடுகளைத் தவிர்க்கவும் அல்லது அவற்றை பின்னணி பணிகளுக்கு அனுப்பவும்.
- பிற மிடில்வேருடன் மோதல்: உங்கள் மிடில்வேர் உங்கள் திட்டத்தில் உள்ள பிற மிடில்வேருடன் அல்லது ஜாங்கோவின் இயல்புநிலை மிடில்வேருடன் கூட மோதலாம் என்பதை அறிந்து கொள்ளுங்கள். ஆவணங்களை கவனமாக மதிப்பாய்வு செய்து, அனைத்து மிடில்வேரும் சரியாக செயல்படுவதை உறுதிப்படுத்தவும்.
- நோக்கமற்ற பக்க விளைவுகள்: உங்கள் மிடில்வேர் கோரிக்கை/மறுமொழி பொருட்களை திட்டமிட்ட வழிகளில் மட்டுமே மாற்றியமைக்கிறது என்பதை உறுதிப்படுத்தவும். எதிர்பாராத நடத்தைகளுக்கு வழிவகுக்கும் நோக்கமற்ற பக்க விளைவுகளைத் தவிர்க்கவும்.
- அமர்வு சிக்கல்கள்: அமர்வு தொடர்பான சிக்கல்கள் இருந்தால், `SessionMiddleware` உங்கள் `settings.py` கோப்பில் சரியாக உள்ளமைக்கப்பட்டுள்ளதா என்பதையும், அமர்வு தரவு சரியாக சேமிக்கப்பட்டு அணுகப்படுவதையும் உறுதிப்படுத்தவும்.
- CSRF டோக்கன் சிக்கல்கள்: CSRF டோக்கன் தொடர்பான சிக்கல்களை நீங்கள் எதிர்கொண்டால், `CsrfViewMiddleware` `settings.py` இல் சரியாக உள்ளதா என்பதை உறுதிப்படுத்தவும். மேலும் உங்கள் படிவங்களில் சரியான csrf டோக்கன் வழங்குதலை இருமுறை சரிபார்க்கவும்.
சிக்கல்களைக் கண்டறிய ஜாங்கோவின் உள்ளமைக்கப்பட்ட பிழைத்திருத்த கருவிகள் மற்றும் பதிவு செய்தலை பயன்படுத்தவும். ஏதேனும் சிக்கல்களின் மூல காரணத்தைக் கண்டறிய கோரிக்கை/மறுமொழி வாழ்க்கைச் சுழற்சியை பகுப்பாய்வு செய்யவும். வரிசைப்படுத்துவதற்கு முன் உங்கள் மிடில்வேரை முழுமையாக சோதிப்பது மிக முக்கியம்.
முடிவுரை: ஜாங்கோ மிடில்வேரில் தேர்ச்சி பெறுதல்
ஜாங்கோ மிடில்வேர் எந்த ஜாங்கோ டெவலப்பருக்கும் ஒரு அடிப்படை கருத்து ஆகும். இது எவ்வாறு செயல்படுகிறது, அதை எவ்வாறு உள்ளமைப்பது, மற்றும் தனிப்பயன் மிடில்வேரை எவ்வாறு உருவாக்குவது என்பதைப் புரிந்துகொள்வது வலுவான, பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய வலை பயன்பாடுகளை உருவாக்குவதற்கு மிக முக்கியம்.
மிடில்வேரில் தேர்ச்சி பெறுவதன் மூலம், உங்கள் பயன்பாட்டின் கோரிக்கை செயலாக்க பைப்லைன் மீது சக்திவாய்ந்த கட்டுப்பாட்டைப் பெறுவீர்கள், அங்கீகாரம் மற்றும் அங்கீகாரமளித்தல் முதல் செயல்திறன் மேம்பாடு மற்றும் பாதுகாப்பு மேம்பாடுகள் வரை பரந்த அளவிலான செயல்பாடுகளை செயல்படுத்த உங்களை அனுமதிக்கிறது.
உங்கள் திட்டங்கள் சிக்கலானதாக வளரும்போது, மிடில்வேரை திறம்பட பயன்படுத்தும் திறன் ஒரு அத்தியாவசிய திறனாக மாறும். பயிற்சி செய்து, பரிசோதனை செய்து கொண்டே இருங்கள், ஜாங்கோவின் மிடில்வேர் அமைப்பின் சக்தியைப் பயன்படுத்துவதில் நீங்கள் திறமை பெறுவீர்கள்.